js 改写对象转字符串 字符串转对象(不丢失对象方法)

您所在的位置:网站首页 js 字符串转成json js 改写对象转字符串 字符串转对象(不丢失对象方法)

js 改写对象转字符串 字符串转对象(不丢失对象方法)

2023-07-20 22:31| 来源: 网络整理| 查看: 265

js 改写对象(包括方法)转字符串 对象转字符串字符串转对象总结 js中将对象转化为字符串可以用JSON.stringify,字符串转对象可以用JSON.parse。这两个方法在大部分的情况下都很好用,但是这两个方法在进行字符串转换的时候,会丢失对象中的方法。我们有时候会想要保留对象中的方法,这就需要进行一些额外的操作。

对象转字符串

对象转字符串要保留函数的思路是将对象中的函数转化为字符串,然后再调用JSON.stringify将更改过的对象转化为字符串。方法如下:

// 返回一个将对象中的函数都转化为字符串的对象 不直接在原对象上面改 function stringifyFunction(obj){ let newobj = JSON.parse(JSON.stringify(obj)) for(let key in obj){ if(obj[key] instanceof Function){ newobj[key] = obj[key].toString().replace(/[\n\t]/g,""); continue; } if(obj[key] instanceof Object){ newobj[key] = stringifyFunction(obj[key]); } } return newobj; } function objectToString(obj){ // 用于替代JSON.stringify函数 let _object = stringifyFunction(obj); // 将对象中的函数转为字符串 return JSON.stringify(_object) // 将对象转为字符串 } 字符串转对象

思路主要是先用JSON.parse将字符串转为对象,然后使用正则表达式匹配对象中的属性,找出函数字符串使用Function对象转为函数。方法如下:

function stringToFunction(obj){ // 将对象中的函数字符串转化为函数 var regex = /^((function\s)|.)([a-zA-Z_][a-zA-Z0-9_]*)\(.*\)\s\{.*\}/ //匹配函数字符串 for(let key in obj){ if(obj[key] instanceof Object){ stringToFunction(obj[key]); }else{ if(regex.test(obj[key])){ // 是一个函数 try{ let params = obj[key].substring(obj[key].indexOf('(')+1,obj[key].indexOf(')')); let operation = obj[key].substring(obj[key].indexOf("{")+1,obj[key].length-1); obj[key] = new Function(params, operation); }catch(e){ console.log(e) } } } } return obj } function stringToObject(string){ // 用于替代JSON.parse let obj = JSON.parse(string); //将字符串转为对象 return stringToFunction(obj) // 将对象中的函数字符串转为函数 } 总结

修改以后的两个函数在对象没有方法的时候,与原本的JSON.stringify以及JSON.parse是一样的,仅单独对属性为方法的情况进行处理。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3